bitkeeper revision 1.1159.179.6 (419dd936eFhwYzXtzmEE2hYiNXjHZQ)
authorcl349@arcadians.cl.cam.ac.uk <cl349@arcadians.cl.cam.ac.uk>
Fri, 19 Nov 2004 11:29:58 +0000 (11:29 +0000)
committercl349@arcadians.cl.cam.ac.uk <cl349@arcadians.cl.cam.ac.uk>
Fri, 19 Nov 2004 11:29:58 +0000 (11:29 +0000)
Pass irq number in regs->orig_eax like the regular i386 code.

linux-2.6.10-rc2-xen-sparse/arch/xen/i386/kernel/irq.c
linux-2.6.10-rc2-xen-sparse/arch/xen/kernel/evtchn.c

index abac46a91c9f1d8adc86b1df45d79c3efb2fad2e..3d4e563127e7fabfcca3bceaeb39ca9c1e76bd1f 100644 (file)
@@ -45,8 +45,10 @@ static union irq_ctx *softirq_ctx[NR_CPUS];
  * SMP cross-CPU interrupts have their own specific
  * handlers).
  */
-unsigned int do_IRQ(int irq, struct pt_regs *regs)
-{
+fastcall unsigned int do_IRQ(struct pt_regs *regs)
+{      
+       /* high bits used in ret_from_ code */
+       int irq = regs->orig_eax & 0xff;
 #ifdef CONFIG_4KSTACKS
        union irq_ctx *curctx, *irqctx;
        u32 *isp;
index c3d912d1dfe7cae2aa4b3e190c858c7b22bf6c4c..8b548430c697eff38aeff5ca9689161372e466b5 100644 (file)
@@ -68,7 +68,13 @@ static int irq_bindcount[NR_IRQS];
 static unsigned long pirq_needs_unmask_notify[NR_PIRQS/sizeof(unsigned long)];
 
 /* Upcall to generic IRQ layer. */
-extern unsigned int do_IRQ(int irq, struct pt_regs *regs);
+#ifdef CONFIG_X86
+extern fastcall unsigned int do_IRQ(struct pt_regs *regs);
+#define do_IRQ(irq, regs) do {         \
+    (regs)->orig_eax = (irq);          \
+    do_IRQ((regs));                    \
+} while (0)
+#endif
 
 #define VALID_EVTCHN(_chn) ((_chn) != -1)